/*
* SoapUI, Copyright (C) 2004-2016 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.x.impl.swing;
import com.eviware.x.form.XFormOptionsField;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class JComboBoxFormField extends AbstractSwingXFormField<JComboBox> implements ItemListener, XFormOptionsField {
public JComboBoxFormField(Object[] values) {
super(new JComboBox());
setOptions(values);
getComponent().addItemListener(this);
}
public void setValue(String value) {
getComponent().setSelectedItem(value);
}
public String getValue() {
Object selectedItem = getComponent().getSelectedItem();
return selectedItem == null ? null : selectedItem.toString();
}
public void itemStateChanged(ItemEvent e) {
Object selectedItem = getComponent().getSelectedItem();
fireValueChanged(selectedItem == null ? null : selectedItem.toString(), null);
}
public void addItem(Object value) {
getComponent().addItem(value);
}
public void setOptions(Object[] values) {
String selectedItem = getValue();
DefaultComboBoxModel model = new DefaultComboBoxModel(values);
if (values.length > 0 && values[0] == null) {
model.removeElementAt(0);
getComponent().setEditable(true);
} else {
getComponent().setEditable(false);
}
getComponent().setModel(model);
if (selectedItem != null) {
getComponent().setSelectedItem(selectedItem);
} else if (getComponent().isEditable()) {
getComponent().setSelectedItem("");
}
}
public Object[] getOptions() {
ComboBoxModel model = getComponent().getModel();
Object[] result = new Object[model.getSize()];
for (int c = 0; c < result.length; c++) {
result[c] = model.getElementAt(c);
}
return result;
}
public Object[] getSelectedOptions() {
return new Object[]{getComponent().getSelectedItem()};
}
public void setSelectedOptions(Object[] options) {
getComponent().setSelectedItem(options.length > 0 ? options[0] : null);
}
public int[] getSelectedIndexes() {
return new int[]{getComponent().getSelectedIndex()};
}
}